iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
DevOps

k8s新手船長船難記系列 第 8

[DAY8]k8s必學的設定檔-yaml (上)

  • 分享至 

  • xImage
  •  

YAML(/ˈjæməl/,尾音類似camel駱駝)是一個可讀性高,用來表達資料序列化的格式。YAML參考了其他多種語言,包括:C語言、Python、Perl,並從XML、電子郵件的數據格式(RFC 2822)中獲得靈感。Clark Evans在2001年首次發表了這種語言[1],另外Ingy döt Net與Oren Ben-Kiki也是這語言的共同設計者[2]。目前已經有數種程式語言或手稿語言支援(或者說解析)這種語言。
YAML是"YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞迴縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)[3],但為了強調這種語言以數據做為中心,而不是以標記語言為重點,而用反向縮略語重新命名。

資料來源wiki

YAML簡介

語法規則:

  • 大小寫敏感
  • 使用縮排進行階層,如果編輯器有支援yaml的話(vs code有yaml套件可以用),按tab會進行縮排,看到部份文章有提到不要使用table,也是是因為編輯器沒有yaml套件支援的關係吧?如果沒對齊也會自行檢查錯誤。
  • #為註解符號

YAML Maps與List

  • maps:key-value的組合
  • list:就陣列../images/emoticon/emoticon06.gif

就用k0s裡面部署的yaml來進行舉例

maps

apiVersion: apps/v1 # key值叫apiVersion,value是apps/v1
kind: Deployment

maps的value也可以是一個maps

metadata: # 這邊就是階層式的宣告,metadata底下有個叫name的key-value設定值,基本上是使用2個空白進行同階的處理,大原則就是一致的縮排空白數量
  name: k0s-nginx

list

如果在yaml中有array的資料想要使用,可以使用-進行資料分隔,
list的value也可以是maps,maps的value也可以是list,視自己的需求來決定yaml怎麼組成

spec:
      containers:
      - command
        - name: nginx
          image: nginx:latest
          ports:
          - containerPort: 80
      - args: # 同args : [proxy,sidecar]
        - proxy
        - sidecar 

k8s yaml說明

  • apiVersion : 簡單說就是版本號,目前是v1版,但是這個版本還是會根據k8s的版本迭代。
  • kind : 要建立的資源類型,有Pod、Deployment、Job、Ingress、Service,主要還是以Deployment為主要講解類型。
  • metadata : pod的meta資訊
    • name (string)
    • generateName (string)
    • namespace (string)
    • labels (map[string]string)
    • annotations (map[string]string)
      資料來源ObjectMeta
  • spec : k8s的參數,有container、name、image、command、args、workingDir、ports、env、resource、volumeMounts、livenessProbe、readinessProbe、livecycle、terminationMessagePath、imagePullPolicy、securityContext、stdin、stdinOnce、tty..等等。

以下為一個簡單的nginx Deployment yaml檔

apiVersion: apps/v1 # 版本v1
kind: Deployment
metadata:
  name: k0s-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1 
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80


上一篇
[DAY7]從0開始裝k8s(2)-k0s
下一篇
[DAY9]k8s必學的設定檔-yaml (下)
系列文
k8s新手船長船難記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言